package admin

import (
	"blogApi/controllers"
	. "blogApi/models"
	"encoding/json"
	"strings"
)

type TagController struct {
	controllers.BaseController
}

func (cont *TagController) Index() {
	page, pageErr := cont.GetInt("page")
	status, statusErr := cont.GetInt("status")
	limit, limitErr := cont.GetInt("limit")
	if pageErr != nil {
		page = 1
	}
	if limitErr != nil {
		limit = 10
	}
	query := Db.Model(&Tag{})
	//查询条件
	if name := strings.TrimSpace(cont.GetString("keywords")); name != "" {
		query.Where("name LIKE ?", "%"+name+"%")
	}
	if statusErr == nil {
		query.Where("status = ?", status)
	}
	offset := (page - 1) * limit
	// 总数
	var total int64
	// 返回数据
	list := make([]*Tag, 0)
	query.Count(&total)
	query.Order("id desc").Offset(offset).Limit(limit).Find(&list)
	resMap := make(map[string]interface{})
	resMap["list"] = list
	resMap["total"] = total
	cont.ResJson(0, "获取成功", resMap, nil)
}

func (cont *TagController) Store() {
	if cont.Ctx.Input.IsPost() == false {
		cont.ResJson(1, "请求方式错误", nil, nil)
	}
	var input Tag
	// 获取 axios 传递的post参数
	if err := json.Unmarshal(cont.Ctx.Input.RequestBody, &input); err != nil {
		cont.ResJson(1, "json转化失败", input, nil)
	}
	// 验证
	if msg := input.SelfValid(); msg != nil {
		cont.ResJson(1, msg, input, nil)
	}
	info := Tag{Name: input.Name}
	if result := Db.Debug().Create(&info); result.Error != nil {
		cont.ResJson(1, "操作失败", result.Error, nil)
	}
	cont.ResJson(0, "操作成功", info, nil)
}

// 更新
func (cont *TagController) Update() {
	if cont.Ctx.Input.IsPut() == false {
		cont.ResJson(1, "请求方式错误", nil, nil)
	}
	var input Tag
	// 接收get等参数
	if err := cont.ParseForm(&input); err != nil {
		cont.ResJson(1, "参数解析失败", nil, nil)
	}
	// 验证
	if msg := input.SelfValid(); msg != nil {
		cont.ResJson(1, msg, input, nil)
	}
	if result := Db.Model(&Tag{}).Where("id = ?", input.Id).Select("*").Omit("Id", "Created_at").Updates(input); result.Error != nil {
		cont.ResJson(1, "存入失败", result.Error, nil)
	}
	cont.ResJson(0, "操作成功", input, nil)
}

func (cont *TagController) Destroy() {
	if cont.Ctx.Input.IsDelete() == false {
		cont.ResJson(1, "请求方式错误", nil, nil)
	}
	id := cont.Input().Get("id")
	var input Tag
	if result := Db.Where("id = ?", id).Delete(&input); result.Error != nil {
		cont.ResJson(1, "操作失败", result.Error, nil)
	}
	cont.ResJson(0, "操作成功", input, nil)
}
